package com.weimob.cloud.api.shop.rsp;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.Getter;
import lombok.Setter;

import java.io.Serializable;
import java.util.List;

/**
 * 微盟订单详情返回
 */
@Getter
@Setter
public class WeimobShopOrderDetailRsp implements Serializable {

    @JsonProperty("orderInfo")
    private OrderInfoDTO orderInfo;

    @JsonProperty("rightsInfos")
    private List<RightsInfosDTO> rightsInfos;

    @JsonProperty("fulfillInfoList")
    private List<FulfillInfoListDTO> fulfillInfoList;

    @Data
    public static class OrderInfoDTO implements Serializable {

        @JsonProperty("orderBaseInfo")
        private OrderBaseInfoDTO orderBaseInfo;

        @JsonProperty("invoiceInfo")
        private InvoiceInfoDTO invoiceInfo;

        @JsonProperty("orderExt")
        private OrderExtDTO orderExt;

        @JsonProperty("orderFulfill")
        private OrderFulfillDTO orderFulfill;

        @JsonProperty("cancelInfo")
        private CancelInfoDTO cancelInfo;

        @JsonProperty("totalDiscounts")
        private List<TotalDiscountsDTO> totalDiscounts;

        @JsonProperty("orderBizExt")
        private OrderBizExtDTO orderBizExt;

        @JsonProperty("merchantInfo")
        private MerchantInfoDTO merchantInfo;

        @JsonProperty("confirmInfo")
        private ConfirmInfoDTO confirmInfo;

        @JsonProperty("buyerInfo")
        private BuyerInfoDTO buyerInfo;

        @JsonProperty("flagInfo")
        private FlagInfoDTO flagInfo;

        @JsonProperty("preSellInfo")
        private PreSellInfoDTO preSellInfo;

        @JsonProperty("items")
        private List<ItemsDTO> items;

        @JsonProperty("payInfo")
        private PayInfoDTO payInfo;

        @JsonProperty("guideInfo")
        private GuideInfoDTO guideInfo;

        @JsonProperty("discountInfos")
        private List<DiscountInfosDTO> discountInfos;

        @Data
        public static class OrderBaseInfoDTO implements Serializable {

            @JsonProperty("autoCancelTime")
            private Long autoCancelTime;

            @JsonProperty("orderType")
            private Integer orderType;

            @JsonProperty("finishTime")
            private Long finishTime;

            @JsonProperty("orderSource")
            private Integer orderSource;

            @JsonProperty("orderNo")
            private Long orderNo;

            @JsonProperty("payTime")
            private Long payTime;

            @JsonProperty("deliveryType")
            private Integer deliveryType;

            @JsonProperty("orderStatus")
            private Integer orderStatus;

            @JsonProperty("channelType")
            private Integer channelType;

            @JsonProperty("confirmTime")
            private Long confirmTime;

            @JsonProperty("updateTime")
            private Long updateTime;

            @JsonProperty("parentOrderNo")
            private Long parentOrderNo;

            @JsonProperty("finishDeliveryTime")
            private Long finishDeliveryTime;

            @JsonProperty("payType")
            private Integer payType;

            @JsonProperty("thirdOrderNo")
            private String thirdOrderNo;

            @JsonProperty("isDeleted")
            private Integer isDeleted;

            @JsonProperty("createTime")
            private Long createTime;

            @JsonProperty("bizSourceType")
            private Integer bizSourceType;

            @JsonProperty("payStatus")
            private Integer payStatus;
        }

        @Data
        public static class InvoiceInfoDTO implements Serializable {

            @JsonProperty("titleType")
            private Integer titleType;

            @JsonProperty("receiverInfo")
            private ReceiverInfoDTO receiverInfo;

            @JsonProperty("titleInfo")
            private TitleInfoDTO titleInfo;

            @JsonProperty("invoiceType")
            private Integer invoiceType;

            @JsonProperty("invoiceStatus")
            private Integer invoiceStatus;

            @Data
            public static class ReceiverInfoDTO implements Serializable {

                @JsonProperty("receiverTel")
                private String receiverTel;

                @JsonProperty("receiverEmail")
                private String receiverEmail;
            }

            @Data
            public static class TitleInfoDTO implements Serializable {

                @JsonProperty("bankAccount")
                private String bankAccount;

                @JsonProperty("titleName")
                private String titleName;

                @JsonProperty("companyAddress")
                private String companyAddress;

                @JsonProperty("companyTel")
                private String companyTel;

                @JsonProperty("taxNumber")
                private String taxNumber;

                @JsonProperty("bankAddress")
                private String bankAddress;
            }
        }

        @Data
        public static class OrderExtDTO implements Serializable {

            @JsonProperty("outOrderInfo")
            private OutOrderInfoDTO outOrderInfo;

            @JsonProperty("orderExtInfo")
            private OrderExtInfoDTO orderExtInfo;

            @Data
            public static class OutOrderInfoDTO implements Serializable {

                @JsonProperty("outCreateTime")
                private String outCreateTime;

                @JsonProperty("outOrderNo")
                private String outOrderNo;
            }

            @Data
            public static class OrderExtInfoDTO implements Serializable {

                @JsonProperty("crmMemberInfo")
                private String crmMemberInfo;
            }
        }

        @Data
        public static class OrderFulfillDTO implements Serializable {

            @JsonProperty("customFieldInfo")
            private List<CustomFieldInfoDTO> customFieldInfo;

            @JsonProperty("deliveryTime")
            private Long deliveryTime;

            @JsonProperty("expRcvType")
            private Integer expRcvType;

            @JsonProperty("deliveryVidInfo")
            private DeliveryVidInfoDTO deliveryVidInfo;

            @JsonProperty("receiverInfo")
            private ReceiverInfoDTO receiverInfo;

            @JsonProperty("deliveryType")
            private Integer deliveryType;

            @JsonProperty("expRcvDate")
            private Long expRcvDate;

            @JsonProperty("deliverySubCode")
            private String deliverySubCode;

            @JsonProperty("deliveryCoName")
            private String deliveryCoName;

            @JsonProperty("orderCycleInfo")
            private OrderCycleInfoDTO orderCycleInfo;

            @JsonProperty("expRcvStartTime")
            private Long expRcvStartTime;

            @JsonProperty("fulfillStatus")
            private Integer fulfillStatus;

            @JsonProperty("expRcvEndTime")
            private Long expRcvEndTime;

            @JsonProperty("deliveryCode")
            private String deliveryCode;

            @Data
            public static class DeliveryVidInfoDTO implements Serializable {

                @JsonProperty("vid")
                private Long vid;

                @JsonProperty("vidCode")
                private String vidCode;

                @JsonProperty("vidType")
                private Integer vidType;

                @JsonProperty("vidName")
                private String vidName;
            }

            @Data
            public static class ReceiverInfoDTO implements Serializable {

                @JsonProperty("area")
                private String area;

                @JsonProperty("zip")
                private String zip;

                @JsonProperty("address")
                private String address;

                @JsonProperty("city")
                private String city;

                @JsonProperty("cityCode")
                private String cityCode;

                @JsonProperty("provinceCode")
                private String provinceCode;

                @JsonProperty("latitude")
                private String latitude;

                @JsonProperty("county")
                private String county;

                @JsonProperty("certificateInfo")
                private CertificateInfoDTO certificateInfo;

                @JsonProperty("areaCode")
                private String areaCode;

                @JsonProperty("countyCode")
                private String countyCode;

                @JsonProperty("province")
                private String province;

                @JsonProperty("phone")
                private String phone;

                @JsonProperty("name")
                private String name;

                @JsonProperty("longitude")
                private String longitude;

                @Data
                public static class CertificateInfoDTO implements Serializable {

                    @JsonProperty("behindImg")
                    private String behindImg;

                    @JsonProperty("frontImg")
                    private String frontImg;

                    @JsonProperty("userName")
                    private String userName;

                    @JsonProperty("certificateNo")
                    private String certificateNo;

                    @JsonProperty("certificateType")
                    private String certificateType;
                }
            }

            @Data
            public static class OrderCycleInfoDTO implements Serializable {

                @JsonProperty("cycleSkuInfo")
                private CycleSkuInfoDTO cycleSkuInfo;

                @JsonProperty("nextCycleFulfillInfo")
                private NextCycleFulfillInfoDTO nextCycleFulfillInfo;

                @JsonProperty("curCycleFulfillInfo")
                private CurCycleFulfillInfoDTO curCycleFulfillInfo;

                @Data
                public static class CycleSkuInfoDTO implements Serializable {

                    @JsonProperty("cycleFrequency")
                    private Integer cycleFrequency;

                    @JsonProperty("cycleNum")
                    private Integer cycleNum;
                }

                @Data
                public static class NextCycleFulfillInfoDTO implements Serializable {

                    @JsonProperty("expectReceivedStartTime")
                    private Long expectReceivedStartTime;

                    @JsonProperty("expectReceivedEndTime")
                    private Long expectReceivedEndTime;

                    @JsonProperty("cycleFrequency")
                    private Integer cycleFrequency;

                    @JsonProperty("cycleNum")
                    private Integer cycleNum;

                    @JsonProperty("expectReceivedDate")
                    private Long expectReceivedDate;
                }

                @Data
                public static class CurCycleFulfillInfoDTO implements Serializable {

                    @JsonProperty("expectReceivedStartTime")
                    private Long expectReceivedStartTime;

                    @JsonProperty("expectReceivedEndTime")
                    private Long expectReceivedEndTime;

                    @JsonProperty("cycleFrequency")
                    private Integer cycleFrequency;

                    @JsonProperty("cycleNum")
                    private Integer cycleNum;

                    @JsonProperty("expectReceivedDate")
                    private Long expectReceivedDate;
                }
            }

            @Data
            public static class CustomFieldInfoDTO implements Serializable {

                @JsonProperty("showScene")
                private List<Integer> showScene;

                @JsonProperty("name")
                private String name;

                @JsonProperty("sort")
                private Integer sort;

                @JsonProperty("type")
                private String type;

                @JsonProperty("value")
                private String value;

                @JsonProperty("key")
                private String key;
            }
        }

        @Data
        public static class CancelInfoDTO implements Serializable {

            @JsonProperty("reason")
            private String reason;

            @JsonProperty("cancelType")
            private Integer cancelType;

            @JsonProperty("specialReason")
            private String specialReason;

            @JsonProperty("id")
            private Long id;
        }

        @Data
        public static class OrderBizExtDTO implements Serializable {

            @JsonProperty("operatorInfo")
            private OperatorInfoDTO operatorInfo;

            @JsonProperty("labelInfos")
            private List<LabelInfosDTO> labelInfos;

            @JsonProperty("featureType")
            private Integer featureType;

            @JsonProperty("finishInfo")
            private FinishInfoDTO finishInfo;

            @JsonProperty("orderExtInfo")
            private OrderExtInfoDTO orderExtInfo;

            @JsonProperty("saleChannelType")
            private Integer saleChannelType;

            @Data
            public static class OperatorInfoDTO implements Serializable {

                @JsonProperty("operatorPhone")
                private String operatorPhone;

                @JsonProperty("operatorId")
                private String operatorId;

                @JsonProperty("operatorName")
                private String operatorName;
            }

            @Data
            public static class FinishInfoDTO implements Serializable {

                @JsonProperty("finishOrderType")
                private Integer finishOrderType;
            }

            @Data
            public static class OrderExtInfoDTO implements Serializable {

                @JsonProperty("bizChannelExtInfo")
                private String bizChannelExtInfo;

                @JsonProperty("exchangeRightsOrderNo")
                private String exchangeRightsOrderNo;

                @JsonProperty("exchangeOriginOrderNo")
                private String exchangeOriginOrderNo;

                @JsonProperty("bizSharerInfo")
                private String bizSharerInfo;

                @JsonProperty("mallDownStreamBizInfo")
                private String mallDownStreamBizInfo;
            }

            @Data
            public static class LabelInfosDTO implements Serializable {

                @JsonProperty("attachment")
                private String attachment;

                @JsonProperty("labelType")
                private String labelType;

                @JsonProperty("attachId")
                private String attachId;
            }
        }

        @Data
        public static class MerchantInfoDTO implements Serializable {

            @JsonProperty("productId")
            private Long productId;

            @JsonProperty("productInstanceId")
            private Long productInstanceId;

            @JsonProperty("processVid")
            private Long processVid;

            @JsonProperty("productName")
            private String productName;

            @JsonProperty("vidName")
            private String vidName;

            @JsonProperty("processVidName")
            private String processVidName;

            @JsonProperty("vid")
            private Long vid;

            @JsonProperty("merchantId")
            private Long merchantId;

            @JsonProperty("bosName")
            private String bosName;

            @JsonProperty("bosId")
            private Long bosId;

            @JsonProperty("merchantExtInfo")
            private MerchantExtInfoDTO merchantExtInfo;

            @JsonProperty("processVidType")
            private Integer processVidType;

            @JsonProperty("vidType")
            private Integer vidType;

            @Data
            public static class MerchantExtInfoDTO implements Serializable {

                @JsonProperty("outShopName")
                private String outShopName;

                @JsonProperty("processVidNumber")
                private String processVidNumber;

                @JsonProperty("vidNumber")
                private String vidNumber;

                @JsonProperty("outShopCode")
                private String outShopCode;

                @JsonProperty("deliveryVid")
                private Long deliveryVid;
            }
        }

        @Data
        public static class ConfirmInfoDTO implements Serializable {

            @JsonProperty("isOrderToConfirm")
            private Integer isOrderToConfirm;

            @JsonProperty("confirmStatus")
            private Integer confirmStatus;
        }

        @Data
        public static class BuyerInfoDTO implements Serializable {

            @JsonProperty("buyerRemark")
            private String buyerRemark;

            @JsonProperty("wid")
            private Long wid;

            @JsonProperty("userNickName")
            private String userNickName;

            @JsonProperty("memberBenefits")
            private List<MemberBenefitsDTO> memberBenefits;

            @Data
            public static class MemberBenefitsDTO implements Serializable {

                @JsonProperty("benefitType")
                private Integer benefitType;
            }
        }

        @Data
        public static class FlagInfoDTO implements Serializable {

            @JsonProperty("flagRank")
            private Integer flagRank;

            @JsonProperty("flagContent")
            private String flagContent;
        }

        @Data
        public static class PreSellInfoDTO implements Serializable {

            @JsonProperty("depositPayType")
            private Integer depositPayType;

            @JsonProperty("preSellDeliveryDate")
            private Long preSellDeliveryDate;
        }

        @Data
        public static class PayInfoDTO implements Serializable {

            @JsonProperty("shouldPayAmount")
            private String shouldPayAmount;

            @JsonProperty("totalAmount")
            private String totalAmount;

            @JsonProperty("payAmount")
            private String payAmount;

            @JsonProperty("totalDiscountAmount")
            private String totalDiscountAmount;

            @JsonProperty("amountInfos")
            private List<AmountInfosDTO> amountInfos;

            @JsonProperty("payItems")
            private List<PayItemsDTO> payItems;

            @Data
            public static class AmountInfosDTO implements Serializable {

                @JsonProperty("shouldPayAmount")
                private String shouldPayAmount;

                @JsonProperty("amount")
                private String amount;

                @JsonProperty("payAmount")
                private String payAmount;

                @JsonProperty("description")
                private String description;

                @JsonProperty("type")
                private Integer type;
            }

            @Data
            public static class PayItemsDTO implements Serializable {

                @JsonProperty("phase")
                private Integer phase;

                @JsonProperty("payType")
                private Integer payType;

                @JsonProperty("payCouponInfos")
                private List<PayCouponInfosDTO> payCouponInfos;

                @JsonProperty("payDiscounts")
                private List<PayDiscountsDTO> payDiscounts;

                @JsonProperty("payTime")
                private Long payTime;

                @JsonProperty("channelTrxNo")
                private String channelTrxNo;

                @JsonProperty("payMethodIds")
                private List<Integer> payMethodIds;

                @JsonProperty("tradeId")
                private String tradeId;

                @JsonProperty("payItemExtInfo")
                private PayItemExtInfoDTO payItemExtInfo;

                @Data
                public static class PayItemExtInfoDTO implements Serializable {

                    @JsonProperty("customPayMethodId")
                    private Integer customPayMethodId;

                    @JsonProperty("amount")
                    private String amount;

                    @JsonProperty("interactId")
                    private String interactId;

                    @JsonProperty("payerInfo")
                    private String payerInfo;

                    @JsonProperty("customPayMethodName")
                    private String customPayMethodName;

                    @JsonProperty("channelMid")
                    private String channelMid;
                }

                @Data
                public static class PayCouponInfosDTO implements Serializable {

                    @JsonProperty("amount")
                    private Integer amount;

                    @JsonProperty("name")
                    private String name;

                    @JsonProperty("channelType")
                    private String channelType;

                    @JsonProperty("id")
                    private String id;

                    @JsonProperty("type")
                    private String type;
                }

                @Data
                public static class PayDiscountsDTO implements Serializable {

                    @JsonProperty("payDiscountItems")
                    private List<PayDiscountItemsDTO> payDiscountItems;

                    @JsonProperty("amount")
                    private String amount;

                    @JsonProperty("name")
                    private String name;

                    @JsonProperty("id")
                    private String id;

                    @JsonProperty("type")
                    private Integer type;

                    @Data
                    public static class PayDiscountItemsDTO implements Serializable {

                        @JsonProperty("itemId")
                        private String itemId;

                        @JsonProperty("amount")
                        private String amount;
                    }
                }
            }
        }

        @Data
        public static class GuideInfoDTO implements Serializable {

            @JsonProperty("privateGuiderWid")
            private Long privateGuiderWid;

            @JsonProperty("privateGuiderNo")
            private String privateGuiderNo;

            @JsonProperty("guiderName")
            private String guiderName;

            @JsonProperty("guiderWid")
            private Long guiderWid;

            @JsonProperty("privateGuiderName")
            private String privateGuiderName;

            @JsonProperty("guiderNo")
            private String guiderNo;

            @JsonProperty("buyerExpandInfo")
            private BuyerExpandInfoDTO buyerExpandInfo;

            @Data
            public static class BuyerExpandInfoDTO implements Serializable {

                @JsonProperty("attributionStoreId")
                private Long attributionStoreId;

                @JsonProperty("attributionStoreName")
                private String attributionStoreName;
            }
        }

        @Data
        public static class TotalDiscountsDTO implements Serializable {

            @JsonProperty("discountAmount")
            private String discountAmount;

            @JsonProperty("discountType")
            private Integer discountType;

            @JsonProperty("attributionType")
            private Integer attributionType;
        }

        @Data
        public static class ItemsDTO implements Serializable {

            @JsonProperty("goodsPreviewUrl")
            private String goodsPreviewUrl;

            @JsonProperty("goodsId")
            private Long goodsId;

            @JsonProperty("skuBarCode")
            private String skuBarCode;

            @JsonProperty("unitType")
            private Integer unitType;

            @JsonProperty("subGoodsType")
            private Integer subGoodsType;

            @JsonProperty("activityTypeList")
            private List<Integer> activityTypeList;

            @JsonProperty("productInfos")
            private List<ProductInfosDTO> productInfos;

            @JsonProperty("imageUrl")
            private String imageUrl;

            @JsonProperty("itemBizExt")
            private ItemBizExtDTO itemBizExt;

            @JsonProperty("skuId")
            private Long skuId;

            @JsonProperty("discountInfos")
            private List<DiscountInfosDTO> discountInfos;

            @JsonProperty("unitName")
            private String unitName;

            @JsonProperty("salePrice")
            private String salePrice;

            @JsonProperty("goodsExt")
            private GoodsExtDTO goodsExt;

            @JsonProperty("categoryTitle")
            private List<String> categoryTitle;

            @JsonProperty("weight")
            private String weight;

            @JsonProperty("priceInfos")
            private List<PriceInfosDTO> priceInfos;

            @JsonProperty("skuAttrInfo")
            private String skuAttrInfo;

            @JsonProperty("goodsType")
            private Integer goodsType;

            @JsonProperty("deductStockStrategy")
            private Integer deductStockStrategy;

            @JsonProperty("volume")
            private String volume;

            @JsonProperty("itemId")
            private Long itemId;

            @JsonProperty("goodsTitle")
            private String goodsTitle;

            @JsonProperty("goodsCode")
            private String goodsCode;

            @JsonProperty("payInfo")
            private PayInfoDTO payInfo;

            @JsonProperty("categoryId")
            private Long categoryId;

            @JsonProperty("skuCode")
            private String skuCode;

            @JsonProperty("skuNum")
            private String skuNum;

            @Data
            public static class ItemBizExtDTO implements Serializable {

                @JsonProperty("itemExtMap")
                private ItemExtMapDTO itemExtMap;

                @JsonProperty("goodsCustom")
                private GoodsCustomDTO goodsCustom;

                @JsonProperty("labelInfos")
                private List<LabelInfosDTO> labelInfos;

                @JsonProperty("goodsSellMode")
                private Integer goodsSellMode;

                @JsonProperty("expandField")
                private String expandField;

                @JsonProperty("goodsPromotionOrderId")
                private String goodsPromotionOrderId;

                @JsonProperty("rightsServiceType")
                private Integer rightsServiceType;

                @JsonProperty("abilityCode")
                private List<String> abilityCode;

                @JsonProperty("combineInfos")
                private List<CombineInfosDTO> combineInfos;

                @JsonProperty("goodsLimitSwitch")
                private Integer goodsLimitSwitch;

                @JsonProperty("goodsPromotionType")
                private Integer goodsPromotionType;

                @JsonProperty("activityStockType")
                private Integer activityStockType;

                @JsonProperty("outerMerchantId")
                private String outerMerchantId;

                @JsonProperty("outItemId")
                private String outItemId;

                @JsonProperty("goodsGuideType")
                private Integer goodsGuideType;

                @JsonProperty("outerSkuId")
                private String outerSkuId;

                @JsonProperty("goodsMessageInfos")
                private List<GoodsMessageInfosDTO> goodsMessageInfos;

                @JsonProperty("bizInfos")
                private List<BizInfosDTO> bizInfos;

                @JsonProperty("attachInfos")
                private List<AttachInfosDTO> attachInfos;

                @JsonProperty("goodsSourceType")
                private Integer goodsSourceType;

                @JsonProperty("outerGoodsId")
                private String outerGoodsId;

                @Data
                public static class ItemExtMapDTO implements Serializable {

                    @JsonProperty("bizCommissionInfo")
                    private String bizCommissionInfo;
                }

                @Data
                public static class GoodsCustomDTO implements Serializable {

                    @JsonProperty("customFields")
                    private List<CustomFieldsDTO> customFields;

                    @JsonProperty("cloudCustom")
                    private String cloudCustom;

                    @Data
                    public static class CustomFieldsDTO implements Serializable {

                        @JsonProperty("name")
                        private String name;

                        @JsonProperty("sort")
                        private Integer sort;

                        @JsonProperty("type")
                        private String type;

                        @JsonProperty("value")
                        private String value;

                        @JsonProperty("key")
                        private String key;
                    }
                }

                @Data
                public static class LabelInfosDTO implements Serializable {

                    @JsonProperty("attachment")
                    private String attachment;

                    @JsonProperty("labelType")
                    private String labelType;

                    @JsonProperty("attachId")
                    private String attachId;
                }

                @Data
                public static class CombineInfosDTO implements Serializable {

                    @JsonProperty("combineItems")
                    private List<CombineItemsDTO> combineItems;

                    @JsonProperty("combineId")
                    private Long combineId;

                    @JsonProperty("activityType")
                    private Integer activityType;

                    @Data
                    public static class CombineItemsDTO implements Serializable {

                        @JsonProperty("itemId")
                        private Long itemId;

                        @JsonProperty("orderNo")
                        private Long orderNo;
                    }
                }

                @Data
                public static class GoodsMessageInfosDTO implements Serializable {
                }

                @Data
                public static class BizInfosDTO implements Serializable {

                    @JsonProperty("subBizType")
                    private Integer subBizType;

                    @JsonProperty("bizType")
                    private Integer bizType;

                    @JsonProperty("bizOrderId")
                    private String bizOrderId;

                    @JsonProperty("bizId")
                    private Long bizId;
                }

                @Data
                public static class AttachInfosDTO implements Serializable {

                    @JsonProperty("groupName")
                    private String groupName;

                    @JsonProperty("valueId")
                    private Long valueId;

                    @JsonProperty("quantity")
                    private Integer quantity;

                    @JsonProperty("valueName")
                    private String valueName;

                    @JsonProperty("salePrice")
                    private Integer salePrice;

                    @JsonProperty("groupId")
                    private Long groupId;

                    @JsonProperty("valueType")
                    private Integer valueType;

                    @JsonProperty("relationId")
                    private String relationId;

                    @JsonProperty("remark")
                    private String remark;
                }
            }

            @Data
            public static class GoodsExtDTO implements Serializable {

                @JsonProperty("originSkuNum")
                private Integer originSkuNum;

                @JsonProperty("originSkuName")
                private String originSkuName;

                @JsonProperty("groupInfos")
                private List<GroupInfosDTO> groupInfos;

                @JsonProperty("categoryInfos")
                private List<CategoryInfosDTO> categoryInfos;

                @JsonProperty("productCategory")
                private String productCategory;

                @Data
                public static class GroupInfosDTO implements Serializable {

                    @JsonProperty("grade")
                    private Integer grade;

                    @JsonProperty("groupId")
                    private Integer groupId;
                }

                @Data
                public static class CategoryInfosDTO implements Serializable {

                    @JsonProperty("categoryLevel")
                    private Integer categoryLevel;

                    @JsonProperty("categoryName")
                    private String categoryName;

                    @JsonProperty("categoryId")
                    private Long categoryId;
                }
            }

            @Data
            public static class PayInfoDTO implements Serializable {

                @JsonProperty("shouldPayAmount")
                private String shouldPayAmount;

                @JsonProperty("totalAmount")
                private String totalAmount;

                @JsonProperty("payAmount")
                private String payAmount;

                @JsonProperty("totalDiscountAmount")
                private String totalDiscountAmount;

                @JsonProperty("amountInfos")
                private List<AmountInfosDTO> amountInfos;

                @Data
                public static class AmountInfosDTO implements Serializable {

                    @JsonProperty("shouldPayAmount")
                    private String shouldPayAmount;

                    @JsonProperty("amount")
                    private String amount;

                    @JsonProperty("payAmount")
                    private String payAmount;

                    @JsonProperty("amountExt")
                    private AmountExtDTO amountExt;

                    @JsonProperty("description")
                    private String description;

                    @JsonProperty("type")
                    private Integer type;

                    @Data
                    public static class AmountExtDTO implements Serializable {

                        @JsonProperty("feeDetailInfos")
                        private List<FeeDetailInfosDTO> feeDetailInfos;

                        @Data
                        public static class FeeDetailInfosDTO implements Serializable {

                            @JsonProperty("shouldPayAmount")
                            private Integer shouldPayAmount;

                            @JsonProperty("amount")
                            private Integer amount;

                            @JsonProperty("payAmount")
                            private Integer payAmount;

                            @JsonProperty("subType")
                            private Integer subType;

                            @JsonProperty("relationId")
                            private String relationId;

                            @JsonProperty("feeId")
                            private String feeId;
                        }
                    }
                }
            }

            @Data
            public static class ProductInfosDTO implements Serializable {

                @JsonProperty("itemSkuQuantity")
                private String itemSkuQuantity;

                @JsonProperty("price")
                private String price;

                @JsonProperty("combSkuId")
                private Long combSkuId;

                @JsonProperty("combTitle")
                private String combTitle;

                @JsonProperty("title")
                private String title;

                @JsonProperty("warehouseInfos")
                private List<WarehouseInfosDTO> warehouseInfos;

                @JsonProperty("productExt")
                private ProductExtDTO productExt;

                @JsonProperty("productType")
                private Integer productType;

                @Data
                public static class ProductExtDTO implements Serializable {

                    @JsonProperty("unit")
                    private String unit;

                    @JsonProperty("productCode")
                    private String productCode;

                    @JsonProperty("imageUrl")
                    private String imageUrl;

                    @JsonProperty("skuId")
                    private Long skuId;

                    @JsonProperty("skuCode")
                    private String skuCode;

                    @JsonProperty("productAttribute")
                    private String productAttribute;
                }

                @Data
                public static class WarehouseInfosDTO implements Serializable {

                    @JsonProperty("quantity")
                    private Integer quantity;

                    @JsonProperty("warehouseId")
                    private Long warehouseId;

                    @JsonProperty("warehouseType")
                    private String warehouseType;

                    @JsonProperty("warehouseName")
                    private String warehouseName;
                }
            }

            @Data
            public static class DiscountInfosDTO implements Serializable {

                @JsonProperty("discountLevel")
                private Integer discountLevel;

                @JsonProperty("discountExt")
                private DiscountExtDTO discountExt;

                @JsonProperty("name")
                private String name;

                @JsonProperty("costAmount")
                private String costAmount;

                @JsonProperty("discountAmount")
                private String discountAmount;

                @JsonProperty("discountType")
                private Integer discountType;

                @JsonProperty("subType")
                private Integer subType;

                @JsonProperty("discountId")
                private String discountId;

                @Data
                public static class DiscountExtDTO implements Serializable {

                    @JsonProperty("feeDiscountDetailInfos")
                    private List<FeeDiscountDetailInfosDTO> feeDiscountDetailInfos;

                    @JsonProperty("attributionType")
                    private Integer attributionType;

                    @Data
                    public static class FeeDiscountDetailInfosDTO implements Serializable {

                        @JsonProperty("costAmount")
                        private Integer costAmount;

                        @JsonProperty("discountAmount")
                        private Integer discountAmount;

                        @JsonProperty("feeId")
                        private String feeId;
                    }
                }
            }

            @Data
            public static class PriceInfosDTO implements Serializable {

                @JsonProperty("amount")
                private String amount;

                @JsonProperty("description")
                private String description;

                @JsonProperty("type")
                private Integer type;
            }
        }

        @Data
        public static class DiscountInfosDTO implements Serializable {

            @JsonProperty("discountLevel")
            private Integer discountLevel;

            @JsonProperty("discountExt")
            private DiscountExtDTO discountExt;

            @JsonProperty("name")
            private String name;

            @JsonProperty("costAmount")
            private String costAmount;

            @JsonProperty("discountAmount")
            private String discountAmount;

            @JsonProperty("discountType")
            private Integer discountType;

            @JsonProperty("subType")
            private Integer subType;

            @JsonProperty("discountId")
            private String discountId;

            @Data
            public static class DiscountExtDTO implements Serializable {

                @JsonProperty("attributionType")
                private Integer attributionType;
            }
        }
    }

    @Data
    public static class RightsInfosDTO implements Serializable {

        @JsonProperty("orderNo")
        private Long orderNo;

        @JsonProperty("rightsStatus")
        private Integer rightsStatus;

        @JsonProperty("rightsId")
        private Long rightsId;

        @JsonProperty("rightsStatusName")
        private String rightsStatusName;

        @JsonProperty("rightsItemId")
        private Long rightsItemId;
    }

    @Data
    public static class FulfillInfoListDTO implements Serializable {

        @JsonProperty("exception")
        private String exception;

        @JsonProperty("fulfillType")
        private Integer fulfillType;

        @JsonProperty("receivingTime")
        private Long receivingTime;

        @JsonProperty("deliveryInfo")
        private DeliveryInfoDTO deliveryInfo;

        @JsonProperty("orderNo")
        private Long orderNo;

        @JsonProperty("sendInfo")
        private SendInfoDTO sendInfo;

        @JsonProperty("deliveryTime")
        private Long deliveryTime;

        @JsonProperty("expectFulfillTime")
        private Long expectFulfillTime;

        @JsonProperty("consignOrder")
        private ConsignOrderDTO consignOrder;

        @JsonProperty("receiveInfo")
        private ReceiveInfoDTO receiveInfo;

        @JsonProperty("remark")
        private String remark;

        @JsonProperty("updateTime")
        private String updateTime;

        @JsonProperty("buyerInfo")
        private BuyerInfoDTO buyerInfo;

        @JsonProperty("autoReceivingTime")
        private Long autoReceivingTime;

        @JsonProperty("cancelTime")
        private Long cancelTime;

        @JsonProperty("fulfillStatus")
        private Integer fulfillStatus;

        @JsonProperty("fulfillNo")
        private Long fulfillNo;

        @JsonProperty("fulfillItemList")
        private List<FulfillItemListDTO> fulfillItemList;

        @JsonProperty("isSplitPackage")
        private Integer isSplitPackage;

        @JsonProperty("autoDeliveryTime")
        private Long autoDeliveryTime;

        @JsonProperty("deliveryVid")
        private Long deliveryVid;

        @JsonProperty("fulfillMethod")
        private Integer fulfillMethod;

        @Data
        public static class DeliveryInfoDTO implements Serializable {

            @JsonProperty("companyCode")
            private String companyCode;

            @JsonProperty("number")
            private String number;

            @JsonProperty("expectReceivedStartTime")
            private Long expectReceivedStartTime;

            @JsonProperty("expectReceivedEndTime")
            private Long expectReceivedEndTime;

            @JsonProperty("writeOffId")
            private Long writeOffId;

            @JsonProperty("companyName")
            private String companyName;

            @JsonProperty("statusName")
            private String statusName;

            @JsonProperty("expectReceivedDate")
            private Long expectReceivedDate;

            @JsonProperty("writeOffName")
            private String writeOffName;

            @JsonProperty("expectReceivedTypeName")
            private String expectReceivedTypeName;

            @JsonProperty("expectReceivedType")
            private Integer expectReceivedType;

            @JsonProperty("status")
            private Integer status;
        }

        @Data
        public static class SendInfoDTO implements Serializable {

            @JsonProperty("addressInfo")
            private AddressInfoDTO addressInfo;

            @JsonProperty("senderAddress")
            private String senderAddress;

            @JsonProperty("sender")
            private SenderDTO sender;

            @Data
            public static class AddressInfoDTO implements Serializable {

                @JsonProperty("area")
                private String area;

                @JsonProperty("zip")
                private String zip;

                @JsonProperty("address")
                private String address;

                @JsonProperty("addressExt")
                private AddressExtDTO addressExt;

                @JsonProperty("province")
                private String province;

                @JsonProperty("city")
                private String city;

                @JsonProperty("latitude")
                private String latitude;

                @JsonProperty("county")
                private String county;

                @JsonProperty("longitude")
                private String longitude;

                @Data
                public static class AddressExtDTO implements Serializable {

                    @JsonProperty("areaCode")
                    private String areaCode;

                    @JsonProperty("countyCode")
                    private String countyCode;

                    @JsonProperty("cityCode")
                    private String cityCode;

                    @JsonProperty("provinceCode")
                    private String provinceCode;
                }
            }

            @Data
            public static class SenderDTO implements Serializable {

                @JsonProperty("senderName")
                private String senderName;

                @JsonProperty("senderMobile")
                private String senderMobile;
            }
        }

        @Data
        public static class ConsignOrderDTO implements Serializable {

            @JsonProperty("consignTime")
            private Long consignTime;

            @JsonProperty("cancelTime")
            private Long cancelTime;

            @JsonProperty("cancelType")
            private Integer cancelType;

            @JsonProperty("confirmEndTime")
            private Long confirmEndTime;

            @JsonProperty("fulfillNo")
            private Long fulfillNo;

            @JsonProperty("consignItems")
            private List<ConsignItemsDTO> consignItems;

            @JsonProperty("consignVidName")
            private String consignVidName;

            @JsonProperty("confirmTime")
            private Long confirmTime;

            @JsonProperty("pickupCode")
            private String pickupCode;

            @JsonProperty("confirmInfo")
            private ConfirmInfoDTO confirmInfo;

            @JsonProperty("confirmType")
            private Integer confirmType;

            @JsonProperty("logisticsInfo")
            private LogisticsInfoDTO logisticsInfo;

            @Data
            public static class ConfirmInfoDTO implements Serializable {

                @JsonProperty("vid")
                private Long vid;

                @JsonProperty("wid")
                private Long wid;

                @JsonProperty("phone")
                private String phone;

                @JsonProperty("name")
                private String name;

                @JsonProperty("vidName")
                private String vidName;

                @JsonProperty("vidType")
                private Integer vidType;
            }

            @Data
            public static class LogisticsInfoDTO implements Serializable {

                @JsonProperty("companyCode")
                private String companyCode;

                @JsonProperty("companyName")
                private String companyName;

                @JsonProperty("deliveryNo")
                private String deliveryNo;

                @JsonProperty("appointment")
                private Long appointment;

                @JsonProperty("remark")
                private String remark;

                @JsonProperty("outOrderNo")
                private String outOrderNo;
            }

            @Data
            public static class ConsignItemsDTO implements Serializable {

                @JsonProperty("consignExts")
                private List<ConsignExtsDTO> consignExts;

                @Data
                public static class ConsignExtsDTO implements Serializable {

                    @JsonProperty("code")
                    private String code;

                    @JsonProperty("name")
                    private String name;

                    @JsonProperty("templateId")
                    private Long templateId;

                    @JsonProperty("type")
                    private Integer type;
                }
            }
        }

        @Data
        public static class ReceiveInfoDTO implements Serializable {

            @JsonProperty("receiverAddress")
            private String receiverAddress;

            @JsonProperty("addressInfo")
            private AddressInfoDTO addressInfo;

            @JsonProperty("receiver")
            private ReceiverDTO receiver;

            @JsonProperty("pickUpVid")
            private Long pickUpVid;

            @JsonProperty("pickUpName")
            private String pickUpName;

            @Data
            public static class AddressInfoDTO implements Serializable {

                @JsonProperty("area")
                private String area;

                @JsonProperty("zip")
                private String zip;

                @JsonProperty("address")
                private String address;

                @JsonProperty("addressExt")
                private AddressExtDTO addressExt;

                @JsonProperty("province")
                private String province;

                @JsonProperty("city")
                private String city;

                @JsonProperty("latitude")
                private String latitude;

                @JsonProperty("county")
                private String county;

                @JsonProperty("longitude")
                private String longitude;

                @Data
                public static class AddressExtDTO implements Serializable {

                    @JsonProperty("areaCode")
                    private String areaCode;

                    @JsonProperty("countyCode")
                    private String countyCode;

                    @JsonProperty("cityCode")
                    private String cityCode;

                    @JsonProperty("provinceCode")
                    private String provinceCode;
                }
            }

            @Data
            public static class ReceiverDTO implements Serializable {

                @JsonProperty("idCardExt")
                private IdCardExtDTO idCardExt;

                @JsonProperty("receiverName")
                private String receiverName;

                @JsonProperty("idCardNo")
                private String idCardNo;

                @JsonProperty("receiverMobile")
                private String receiverMobile;

                @Data
                public static class IdCardExtDTO implements Serializable {

                    @JsonProperty("behindImg")
                    private String behindImg;

                    @JsonProperty("isVerified")
                    private Boolean isVerified;

                    @JsonProperty("frontImg")
                    private String frontImg;

                    @JsonProperty("userName")
                    private String userName;
                }
            }
        }

        @Data
        public static class BuyerInfoDTO implements Serializable {

            @JsonProperty("buyerRemark")
            private String buyerRemark;

            @JsonProperty("wid")
            private Long wid;
        }

        @Data
        public static class FulfillItemListDTO implements Serializable {

            @JsonProperty("product")
            private ProductDTO product;

            @JsonProperty("deliveryNum")
            private String deliveryNum;

            @JsonProperty("goodsId")
            private Long goodsId;

            @JsonProperty("orderItemId")
            private Long orderItemId;

            @Data
            public static class ProductDTO implements Serializable {

                @JsonProperty("itemProducts")
                private List<ItemProductsDTO> itemProducts;

                @Data
                public static class ItemProductsDTO implements Serializable {

                    @JsonProperty("itemSkuQuantity")
                    private String itemSkuQuantity;

                    @JsonProperty("itemSkuId")
                    private Long itemSkuId;

                    @JsonProperty("combSkuId")
                    private Long combSkuId;

                    @JsonProperty("warehouses")
                    private List<WarehousesDTO> warehouses;

                    @JsonProperty("productType")
                    private Integer productType;

                    @Data
                    public static class WarehousesDTO implements Serializable {

                        @JsonProperty("quantity")
                        private String quantity;

                        @JsonProperty("warehouseId")
                        private Long warehouseId;

                        @JsonProperty("warehouseType")
                        private String warehouseType;

                        @JsonProperty("warehouseName")
                        private String warehouseName;
                    }
                }
            }
        }
    }
}
